QT中的自定义信号以及自定义函数 |
您所在的位置:网站首页 › qt信号槽传递自定义结构体 pod › QT中的自定义信号以及自定义函数 |
信号与槽函数是QT的一大创新,通过自定义信号与槽函数可以实现自己想实现的功能。 标准的信号与槽写法如下:connect(&button,&QPushButton::clicked,this,&QWidget::close); 参数说明: (1) &button :信号发出者,指针类型 (2)&QPushButton::clicked :处理的信号, &发送者的类名::信号名字 (不用加函数括号,只需要名字即可)这里说的是button的点击操作 (3) this : 信号接收者 ,指针类型 这里指的是当前窗口 (4)&QWidget::close :&接收者的类名::槽函数名字 自定义槽函数, 普通函数的用法,任意的成员函数,普通全局函数,静态函数都可以作为槽函数 槽函数需要和信号一致(参数,返回值)由于信号都是没有返回值,所以槽函数一般都没有返回值 自定义信号,信号必须有signals关键字来声明 信号没有返回值,但可以有参数,信号就是函数的声明,只需声明,无需定义 使用:emit (一般都是通过自定义槽函数发送信号出去)
来举例说明,建立一个窗口和另一个窗口,一个作为 父窗口,另一个作为 子窗口,每个窗口上面 设置按钮,发生点击信号响应当前窗口隐藏,另一个窗口显示。 1.项目目录如下: 2.代码文件:Headers 头文件 (1)sonwidget.h文件: #ifndef SONWIDGET_H #define SONWIDGET_H #include #include class Sonwidget : public QWidget { Q_OBJECT public: explicit Sonwidget(QWidget *parent = nullptr); QPushButton *button2; //自定义信号 signals: //信号没有返回值,可以有参数,信号函数不需要定义,只需要声明 void show_hide_singal(int a); //自定义槽函数 public slots: void emit_mysignal(); }; #endif // SONWIDGET_H(2)widget.h文件 #ifndef WIDGET_H #define WIDGET_H #include #include "sonwidget.h" #include "QPushButton" class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = 0); ~Widget(); //类成员变量 Sonwidget *sonwidget;//子窗口 QPushButton *button1;//按钮 //自定义的槽函数 public slots: void button_click1();//按钮响应的槽函数 void signal();//子窗口响应的槽函数 }; #endif // WIDGET_H
Sources文件 (1)main.cpp #include "widget.h" #include int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }(2)sonwidget.cpp文件 #include "sonwidget.h" #include "QPushButton" Sonwidget::Sonwidget(QWidget *parent) : QWidget(parent) { this->setWindowTitle("子窗口"); //设置按钮 button2=new QPushButton("显示父窗口,隐藏子窗口",this); //设置连接,子窗口,子窗口的信号为按钮的点击响应,槽函数为父窗口的自定义函数 connect(button2,&QPushButton::clicked,this,&Sonwidget::emit_mysignal); } void Sonwidget::emit_mysignal(){ //点击按钮的函数 emit show_hide_singal(10); }(3)widget.cpp文件 #include "widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) { //父窗口设置标题 this->setWindowTitle("父窗口"); //设置当前窗口的子窗口 this->sonwidget=new Sonwidget; //显示子窗口 sonwidget->show(); //设置按钮 button1=new QPushButton("显示子窗口,隐藏父窗口",this); //设置连接,父窗口上的按钮。信号为点击按钮,槽函数为父窗口的自定义函数 connect(button1,&QPushButton::clicked,this,&Widget::button_click1); //设置连接,子窗口,子窗口的信号,槽函数为父窗口的自定义函数 connect(sonwidget,&Sonwidget::show_hide_singal,this,&Widget::signal); } //设置按钮连接的槽函数 void Widget::button_click1(){ //父窗口隐藏 this->hide(); //子窗口显示 this->sonwidget->show(); } //设置子窗口连接的槽函数 void Widget::signal(){ //父窗口显示 this->show(); //子窗口隐藏 this->sonwidget->hide(); } //类析构函数 Widget::~Widget() { }
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |